60d752ea7139eb3beaa51984a28c55d26bf59f50,src/main/java/org/datanucleus/metadata/AbstractMemberMetaData.java,AbstractMemberMetaData,initialise,#ClassLoaderResolver#,890

Before Change


                        mapmd.key.embedded = Boolean.TRUE;
                    }
                }
                if (mapmd.value.classMetaData != null && mapmd.value.classMetaData.isEmbeddedOnly())
                {
                    // Value is persistent yet embedded only so mark as embedded in metadata
                    if (valueMetaData == null)
                    {
                        valueMetaData = new ValueMetaData();
                        valueMetaData.parent = this;
                        valueMetaData.populate(clr, null);
                    }
                    if (valueMetaData.getEmbeddedMetaData() == null)
                    {
                        EmbeddedMetaData valueEmbmd = new EmbeddedMetaData();
                        valueEmbmd.parent = valueMetaData;
                        valueEmbmd.populate(clr, null, mmgr);
                        valueMetaData.setEmbeddedMetaData(valueEmbmd);
                        mapmd.value.embedded = Boolean.TRUE;
                    }
                }

After Change


     * This should be called AFTER using the populate method if you are going to use populate.
     * It creates the internal convenience arrays etc needed for normal operation.
     */
    public synchronized void initialise(ClassLoaderResolver clr)
    {
        if (persistenceModifier == FieldPersistenceModifier.NONE)
        {
            setInitialised();
            return;
        }

//        MetaDataManager mmgr = getMetaDataManager();

        // Cater for user specifying column name, or columns
        if (columns.isEmpty() && column != null)
        {
            columnMetaData = new ColumnMetaData[1];
            columnMetaData[0] = new ColumnMetaData();
            columnMetaData[0].setName(column);
            columnMetaData[0].parent = this;
            columnMetaData[0].initialise(clr);
        }
        else if (columns.size() == 1 && column != null)
        {
            // Cater for user specifying <column> and <field column="...">
            columnMetaData = new ColumnMetaData[1];
            columnMetaData[0] = columns.get(0);
            if (columnMetaData[0].getName() == null)
            {
                columnMetaData[0].setName(column);
            }
            columnMetaData[0].initialise(clr);
        }
        else
        {
            columnMetaData = new ColumnMetaData[columns.size()];
            for (int i=0; i<columnMetaData.length; i++)
            {
                columnMetaData[i] = columns.get(i);
                columnMetaData[i].initialise(clr);
            }
        }
        // Initialise all sub-objects
        if (containerMetaData != null)
        {
            containerMetaData.initialise(clr);
            if (containerMetaData instanceof CollectionMetaData)
            {
                CollectionMetaData collmd = (CollectionMetaData)containerMetaData;
                if (collmd.element.classMetaData != null)
                {
                    if (collmd.element.classMetaData.isEmbeddedOnly())
                    {
                        // Element is persistent yet embedded only so mark as embedded in metadata
                        if (elementMetaData == null)
                        {
                            elementMetaData = new ElementMetaData();
                            elementMetaData.parent = this;
                            elementMetaData.populate(clr, null);
                        }
                        collmd.setEmbeddedElement(true);
                    }
                    if (embedded == Boolean.TRUE)
                    {
                        // User has set field as embedded, so assume they mean the element
                        collmd.setEmbeddedElement(true);
                        this.embedded = null;
                        this.embeddedMetaData = null;
                    }
                }
            }
            else if (containerMetaData instanceof ArrayMetaData)
            {
                ArrayMetaData arrmd = (ArrayMetaData)containerMetaData;
                if (arrmd.element.classMetaData != null)
                {
                    if (arrmd.element.classMetaData.isEmbeddedOnly())
                    {
                        // Element is persistent yet embedded only so mark as embedded in metadata
                        if (elementMetaData == null)
                        {
                            elementMetaData = new ElementMetaData();
                            elementMetaData.parent = this;
                            elementMetaData.populate(clr, null);
                        }
                        arrmd.setEmbeddedElement(true);
                    }
                    if (embedded == Boolean.TRUE)
                    {
                        // User has set field as embedded, so assume they mean the element
                        arrmd.setEmbeddedElement(true);
                        this.embedded = null;
                        this.embeddedMetaData = null;
                    }
                }
            }
            else if (containerMetaData instanceof MapMetaData)
            {
                MapMetaData mapmd = (MapMetaData)containerMetaData;
                if (mapmd.key.classMetaData != null)
                {
                    if (mapmd.key.classMetaData.isEmbeddedOnly())
                    {
                        // Key is persistent yet embedded only so mark as embedded in metadata
                        if (keyMetaData == null)
                        {
                            keyMetaData = new KeyMetaData();
                            keyMetaData.parent = this;
                            keyMetaData.populate(clr, null);
                        }
                        mapmd.setEmbeddedKey(true);
                    }
                }
                if (mapmd.value.classMetaData != null)
                {
                    if (mapmd.value.classMetaData.isEmbeddedOnly())
                    {
                        // Value is persistent yet embedded only so mark as embedded in metadata
                        if (valueMetaData == null)